/**
 * There are <a href="https://github.com/ketayao/keta-custom">keta-custom</a> code generation
 */
package fms.service.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import fms.core.FLPMsgBuilder;
import fms.dao.CptSendDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
 
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fms.core.FLPMsgBuilder;
import fms.dao.CptSendDAO;
import fms.entity.CptSend;
import fms.service.CptSendService;
import com.ketayao.ketacustom.util.dwz.Page;
import com.ketayao.ketacustom.util.dwz.PageUtils;

@Service
@Transactional
public class CptSendServiceImpl implements CptSendService {
    @PersistenceContext    
    private EntityManager em;
	@Autowired
	private CptSendDAO cptSendDAO;

	/*
	 * (non-Javadoc)
	 * @see com.adcc.skyfms.service.TaskService#get(java.lang.Long)  
	 */ 
	@Override
	public CptSend get(Long id) {
		return cptSendDAO.findOne(id);
	}

	/*
	 * (non-Javadoc) 
	 * @see com.adcc.skyfms.service.TaskService#saveOrUpdate(com.adcc.skyfms.entity.Task)  
	 */
	@Override
	public void saveOrUpdate(CptSend cptSend) {
		cptSendDAO.save(cptSend);
	}

	/*
	 * (non-Javadoc)
	 * @see com.adcc.skyfms.service.TaskService#delete(java.lang.Long)  
	 */
	@Override
	public void delete(Long id) {
		cptSendDAO.delete(id);
	}
	
	/*
	 * (non-Javadoc)
	 * @see com.adcc.skyfms.service.TaskService#findAll(com.ketayao.ketacustom.util.dwz.Page)  
	 */
	@Override
	public List<CptSend> findAll(Page page) {
		org.springframework.data.domain.Page<CptSend> springDataPage = cptSendDAO.findAll(PageUtils.createPageable(page));
		page.setTotalCount(springDataPage.getTotalElements());
		return springDataPage.getContent();
	}
	
	/*
	 * (non-Javadoc)
	 * @see com.adcc.skyfms.service.TaskService#findByExample(org.springframework.data.jpa.domain.Specification, com.ketayao.ketacustom.util.dwz.Page)	
	 */
	@Override
	public List<CptSend> findByExample(
			Specification<CptSend> specification, Page page) {
		org.springframework.data.domain.Page<CptSend> springDataPage = cptSendDAO.findAll(specification, PageUtils.createPageable(page));
		page.setTotalCount(springDataPage.getTotalElements());
		return springDataPage.getContent();
	}
	
	
	public String buildMsg(CptSend cptSend){
		return FLPMsgBuilder.build(cptSend);
	}
	
	
	public List findFlpChartTotalCount(String startDate, String endDate){
		return cptSendDAO.findFlpChartTotalCount(startDate, endDate);
	}
	
	
	public List getAllFlightPlanCount(String startDate, String endDate, String airlines){ 
	    StringBuffer str = new StringBuffer();
	    str.append("select count(*) FROM Cpt_Send d where plan_Date >= to_date(:startDate,'yyyy-mm-dd') and plan_Date <= to_date(:endDate,'yyyy-mm-dd') and send_Type = 2");
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	 str.append(" and airlines=:airlines");
	    }
	    Query query = em.createNativeQuery(str.toString());
	    query.setParameter("startDate", startDate);
	    query.setParameter("endDate", endDate);
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	query.setParameter("airlines", airlines);
	    }
	    
	    List list = query.getResultList();
//System.out.println(str);		    
	    return list;
	}
	
	public List getFlyPlanSumByStatusGroup(String startDate, String endDate, String airlines){ 
	    StringBuffer str = new StringBuffer();
	    str.append("select count(*), send_status FROM Cpt_Send d where plan_Date >= to_date(:startDate,'yyyy-mm-dd') and plan_Date <= to_date(:endDate,'yyyy-mm-dd') and send_Type = 2");
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	 str.append(" and airlines=:airlines");
	    }
	    str.append(" group by send_status ");
	    
	    Query query = em.createNativeQuery(str.toString());
	    query.setParameter("startDate", startDate);
	    query.setParameter("endDate", endDate);
	    
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	query.setParameter("airlines", airlines);
	    }
	    
	    List list = query.getResultList();
//System.out.println(str);	
	    return list;
	}
	
	
	public List getAllWindReplyCount(String startDate, String endDate, String airlines){ 
	    StringBuffer str = new StringBuffer();
	    str.append("select count(*) FROM Cpt_Send d where send_Date >= to_date(:startDate,'yyyy-mm-dd') and send_Date <= to_date(:endDate, 'yyyy-mm-dd') and send_Type = 1");
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	 str.append(" and airlines=:airlines");
	    }
	    
	    Query query = em.createNativeQuery(str.toString());
	    query.setParameter("startDate", startDate);
	    query.setParameter("endDate", endDate);
	    
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	query.setParameter("airlines", airlines);
	    }
	    
	    List list = query.getResultList();
//System.out.println(str);	    
	    return list;
	}
	
	public List getWindReplySumByStatusGroup(String startDate, String endDate, String airlines){ 
	    StringBuffer str = new StringBuffer();
	    str.append("select count(*), send_status FROM Cpt_Send d where send_Date >= to_date(:startDate,'yyyy-mm-dd') and send_Date <= to_date(:endDate,'yyyy-mm-dd') and send_Type = 1");
	    
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	 str.append(" and airlines=:airlines");
	    }
	    str.append(" group by send_status ");
	    
	    Query query = em.createNativeQuery(str.toString());
	    query.setParameter("startDate", startDate);
	    query.setParameter("endDate", endDate);
	    
	    // 管理员，可以查看所有用户数据（添加公司时，如果该公司没有二字码，不可以配置2个字符的字符串作为伪二字码）
	    if (null != airlines && airlines.length() == 2) {
	    	query.setParameter("airlines", airlines);
	    }
	    List list = query.getResultList();
//System.out.println(str);	    
	    return list;
	}
}
